package com.smart.thrift.discoveryandbalance.discovery;

import com.google.common.collect.Maps;

import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;

public abstract class ThriftServerNodeList<T extends ThriftServerNode> implements ServerNodeList<T> {

    protected Map<String, LinkedHashSet<T>> serverNodeMap = Maps.newConcurrentMap();

    public Map<String, LinkedHashSet<T>> getServerNodeMap() {
        return serverNodeMap;
    }

    @Override
    public Map<String, LinkedHashSet<T>> getInitialListOfThriftServers() {
        return getThriftServers();
    }

    @Override
    public Map<String, LinkedHashSet<T>> getUpdatedListOfThriftServers() {
        return refreshThriftServers();
    }

    /**
     * 根据服务名获取所有提供该服务的服务节点
     * @param serviceName ：服务名
     * @return 所有提供该服务的服务节点
     */
    public abstract List<T> getThriftServer(String serviceName);

    /**
     * 刷新该服务的生产者
     * @param serviceName ：服务名
     * @return 所有提供该服务的服务节点
     */
    public abstract List<T> refreshThriftServer(String serviceName);

    /**
     * 获取全量提供的服务信息
     * @return
     */
    public abstract Map<String, LinkedHashSet<T>> getThriftServers();

    /**
     * 刷新全量提供的服务信息
     * @return
     */
    public abstract Map<String, LinkedHashSet<T>> refreshThriftServers();

}
